package 二叉树;

import java.util.Stack;

/**
 * 965. Univalued Binary Tree
 * https://leetcode.com/problems/univalued-binary-tree/
 *
 * A binary tree is univalued if every node in the tree has the same value.
 *
 * Return true if and only if the given tree is univalued.
 *
 * Example 1:
 * Input: [1,1,1,1,1,null,1]
 * Output: true
 *
 * Example 2:
 * Input: [2,2,2,5,2]
 * Output: false
 *
 * Note:
 * The number of nodes in the given tree will be in the range [1, 100].
 * Each node's value will be an integer in the range [0, 99].
 *
 */
public class E_965_单值二叉树 {

    public boolean isUnivalTree(TreeNode root) {
        int value = root.val;

        Stack<TreeNode> stack = new Stack<>();
        if (root.left != null) stack.push(root.left);
        if (root.right != null) stack.push(root.right);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node.val != value) {
                return false;
            }
            if (node.left != null) stack.push(node.left);
            if (node.right != null) stack.push(node.right);
        }
        return true;
    }
}
